<!doctype html>
<title>CanvasCapture applyConstraints</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>

promise_test(async t => {
  let canvas = document.createElement('canvas');
  canvas.width = canvas.height = 64;

  let stream = canvas.captureStream();
  let track = stream.getVideoTracks()[0];
  t.add_cleanup(() => track.stop());

  let settings = track.getSettings();
  assert_equals(settings.width, canvas.width);
  assert_equals(settings.height, canvas.height);
  assert_equals(settings.resizeMode, 'none');

  await track.applyConstraints({width: 63, height: 63});
  settings = track.getSettings();
  assert_equals(settings.width, 63);
  assert_equals(settings.height, 63);
  assert_equals(settings.resizeMode, 'crop-and-scale');

  await track.applyConstraints({resizeMode: {exact: 'none'}});
  settings = track.getSettings();
  assert_equals(settings.width, canvas.width);
  assert_equals(settings.height, canvas.height);
  assert_equals(settings.resizeMode, 'none');

  try {
    await track.applyConstraints(
      {width: {exact: 63}, resizeMode: {exact: 'none'}});
    t.step(()=>assert_unreached('applyConstraints should not have succeeded'));
  } catch(e) {
    assert_equals(e.name, 'OverconstrainedError');
    assert_equals(e.constraint, 'width');
  }

}, "Canvas capture resizeMode");
</script>
</body>
</html>
